﻿@* Quitar esta sección si se utilizan agrupaciones *@
@section Scripts {
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}

@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "Olvidar la contraseña";

    bool passwordSent = false;
    var resetToken = "";
    var email = Request.Form["email"] ?? Request.QueryString["email"];

    // Validación de la instalación
    Validation.RequireField("email", "El campo de dirección de correo electrónico es obligatorio.");

    if (IsPost) {
        AntiForgery.Validate();
        // validar correo electrónico
        bool isValid = true;
        if (Validation.IsValid()) {
            if (WebSecurity.GetUserId(email) > -1 && WebSecurity.IsConfirmed(email)) {
                resetToken = WebSecurity.GeneratePasswordResetToken(email); // Opcionalmente, puede especificar una fecha de expiración para el token.
            } else {
                passwordSent = true; // No queremos revelar que el usuario no existe.
                isValid = false;
            }
        }
        if (isValid) {
            var hostUrl = Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
            var resetUrl = hostUrl + VirtualPathUtility.ToAbsolute("~/Account/PasswordReset?resetToken=" + HttpUtility.UrlEncode(resetToken));
            WebMail.Send(
                to: email,
                subject: "Restablezca su contraseña.", 
                body: "Use este token de restablecimiento de  contraseña para restablecer su contraseña. El token es: " + resetToken + @". Visite <a href=""" + HttpUtility.HtmlAttributeEncode(resetUrl) + @""">" + resetUrl + "</a> para restablecer la contraseña."
            );
            passwordSent = true;
        }
    }
}

<hgroup class="title">
    <h1>@Page.Title.</h1>
    <h2>Use el formulario a continuación para restablecer la contraseña.</h2>
</hgroup>

@if (!WebMail.SmtpServer.IsEmpty()) {
    <p>
        Enviaremos instrucciones para restablecer la contraseña a la dirección de correo electrónico asociada a su cuenta.
    </p>

    if (passwordSent) {
        <p class="message-success">
            Se han enviado instrucciones para restablecer su contraseña a la dirección de correo electrónico especificada.
        </p>
    }

    <form method="post">
        @AntiForgery.GetHtml()
        @Html.ValidationSummary(excludeFieldErrors: true)

        <fieldset>
            <legend>Formulario con instrucciones para restablecer la contraseña</legend>
            <ol>
                <li class="email">
                    <label for="email" @if (!ModelState.IsValidField("email")) {<text>class="error-label"</text>}>Dirección de correo electrónico</label>
                    <input type="text" id="email" name="email" value="@email" disabled="@passwordSent" @Validation.For("email") />
                    @Html.ValidationMessage("email")
                </li>
            </ol>
            <p class="form-actions">
                <input type="submit" value="Enviar instrucciones" disabled="@passwordSent" />
            </p>
        </fieldset>
    </form>
} else {
   <p class="message-info">
       La recuperación de contraseña está deshabilitada para este sitio web porque el servidor SMTP 
       no está correctamente configurado. Póngase en contacto con el propietario de 
       este sitio para restablecer la contraseña.
   </p>
}